package com.song.transport;

import com.song.enumeration.ResponseCode;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;

import java.io.Serializable;

/**
 * 服务器获取到客户端的请求后并完成相应处理
 * 该类为  客户端 发送返回给客户端的响应信息 的 对象
 * @param <T>
 */
@Data
@ToString
@NoArgsConstructor
@AllArgsConstructor
public class RPCResponse<T> implements Serializable {

    //响应对应的请求号
    private String resquestId;

    //相应状态码 可自行定义 客户端和服务端一致即可
    private Integer statusCode;

    //响应状态补充信息
    private String message;

    //响应数据
    private T data;

    //两个静态方法  用于快速生成成功与失败的响应对象
    //服务端调用成功返回的信息  RPCResponse.success()
    public static <T> RPCResponse<T> success(T data, String resquestId) {
        RPCResponse<T> response = new RPCResponse<>();
        response.setResquestId(resquestId);
        response.setStatusCode(ResponseCode.SUCCESS.getCode());
        response.setData(data);

        return response;
    }

    //服务端调用失败返回的信息  RPCResponse.fail()
    public static <T> RPCResponse<T> fail(ResponseCode code, String resquestId) {
        RPCResponse<T> response = new RPCResponse<>();

        response.setResquestId(resquestId);
        response.setStatusCode(code.getCode());
        response.setMessage(code.getMessage());

        return response;
    }
}
